package com.loe.mvp.util

import android.app.*
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.os.Build
import androidx.core.app.NotificationCompat
import com.loe.mvp.R

/**
 * 通知工具
 *
 * @author 章路顺
 * @since 2023/3/4-14:17
 */
object NotificationUtil
{
    fun notice(context: Context, cls: Class<out Activity>)
    {
        val channelId = context.getString(R.string.app_name)

        val intent = Intent(context, cls)

        //注意下面的最后一个参数用PendingIntent.FLAG_UPDATE_CURRENT,否则传参有问题
        val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        //获取NotificationManager实例
        val notifyManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        //实例化NotificationCompat.Builde并设置相关属性
        val builder = NotificationCompat.Builder(context, channelId) //设置小图标
            .setSmallIcon(R.mipmap.icon_logo) //设置通知标题
            .setContentTitle("最简单的Notification") //设置通知内容
            .setContentText("只有小图标、标题、内容")
            .setDefaults(Notification.DEFAULT_SOUND or Notification.DEFAULT_VIBRATE)//设置默认的提示音，振动方式，灯光
            .setContentIntent(pendingIntent)//传值跳转的内容
            .setAutoCancel(true)//点击通知时是否自动消失，需要重点注意的是，setAutoCancel需要和setContentIntent一起使用，否则无效。
        //通过builder.build()方法生成Notification对象,并发送通知,id=1
        notifyManager.notify(1, builder.build())
    }

    /**
     * 创建通道
     */
    fun createChannel(context: Context)
    {
        val notifyManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

        // 用户可以看到的通知渠道的名字.
        val channelId = context.getString(R.string.app_name)

        //Android8.0要求设置通知渠道
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
            val channel = NotificationChannel(channelId, channelId, NotificationManager.IMPORTANCE_HIGH)
            // 配置通知渠道的属性
            //        mChannel.setDescription(description);
            // 设置通知出现时的闪灯（如果 android 设备支持的话）
            channel.enableLights(true)
            channel.lightColor = Color.RED
            // 设置通知出现时的震动（如果 android 设备支持的话）
            channel.enableVibration(true)
            channel.vibrationPattern = longArrayOf(100, 200, 300, 400, 500, 400, 300, 200, 400)
            channel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
            //最后在notificationmanager中创建该通知渠道
            notifyManager.createNotificationChannel(channel)
        }
    }
}